import scala.io.{BufferedSource, Source}

object Demo22Implicit {
  def main(args: Array[String]): Unit = {
    // 3、隐式转换类
    val r1: Demo22Implicit = new Demo22Implicit("Scala/data/words.txt")

    r1.readFile().take(3).foreach(println)

    val r2: Demo22Implicit = new Demo22Implicit("Scala/data/students.txt")

    r2.readFile().take(3).foreach(println)

    val r3: Demo22Implicit = new Demo22Implicit("Scala/data/score.txt")

    r3.readFile().take(3).foreach(println)

    println("#" * 30)

    // 使用隐式转换类 简化创建对象的过程
    "Scala/data/subject.txt".readFile().take(3).foreach(println)
    "Scala/data/score.txt".readFile().take(3).foreach(println)
    "Scala/data/students.txt".readFile().take(3).foreach(println)
    "Scala/data/words.txt".readFile().take(3).foreach(println)

    // 通过隐式转换可以自动的 创建对象
    "Scala/data/words.txt".lineList

  }

  /**
   * 被implicit修饰的类的构造方法只能接收一个参数
   * 隐式转换类会自动的给 构造方法所需要的参数path的类型String
   * 会给所有的String类型的对象自动加上 类中的所有的方法 以及 属性
   *
   */
  implicit class Demo22Implicit(path: String) {
    var lineList: List[String] = _

    def readFile(): List[String] = {
      val bs: BufferedSource = Source.fromFile(path)
      lineList = bs.getLines().toList
      lineList
    }
  }


}

